﻿using System;
using System.Collections.Generic;
using System.Text;
using BCDto.Chats.Message;

namespace BCService.Chats
{
    /// <summary>
    /// 消息相关接口。
    /// </summary>
    public interface IMessageService
    {
        /// <summary>
        /// 获取消息列表。
        /// </summary>
        /// <param name="threadId">会话编号。</param>
        /// <param name="minMessageId">最小消息编号。</param>
        /// <param name="maxMessageId">最大消息编号。</param>
        /// <param name="count">返回消息的条数。</param>
        /// <returns></returns>
        IEnumerable<MessageDto> GetMessages(long threadId, long? minMessageId, long? maxMessageId, int count);

        /// <summary>
        /// 获取指定消息。
        /// </summary>
        /// <param name="messageId">消息编号。</param>
        /// <returns></returns>
        MessageDto GetMessage(long messageId);

        /// <summary>
        /// 创建新消息。
        /// </summary>
        /// <param name="requestDto"></param>
        /// <returns></returns>
        MessageDto Create(MessageRequestDto requestDto);

        /// <summary>
        /// 删除指定的消息。
        /// </summary>
        /// <param name="messageId">消息编号。</param>
        void Delete(long messageId);

        /// <summary>
        /// 撤回指定的消息。
        /// </summary>
        /// <param name="messageId">消息编号。</param>
        /// <returns></returns>
        MessageDto Revoke(long messageId);

        /// <summary>
        /// 回执指定的消息。
        /// </summary>
        /// <param name="messageId">消息编号。</param>
        /// <returns></returns>
        MessageDto Receipt(long messageId);

        /// <summary>
        /// 将指定的消息标记为已处理。
        /// </summary>
        /// <param name="messageId">消息编号。</param>
        /// <returns></returns>
        MessageDto Process(long messageId);

        //MessageDto MarkAsRead(long messageId, MarkAsReadRequestDto requestDto);

        /// <summary>
        /// 获取用户未读消息数量。
        /// </summary>
        /// <returns></returns>
        int GetUnreadCount();
    }
}
